package com.crungoo.batis;

import com.crungoo.services.UserDao;

import java.lang.reflect.Proxy;

/**
 * @author : fujc-dev@qq.com
 * @created : 2022/7/5 14:15
 */

public class LubanFactory {

	/**
	 * 能够得到一个实现了UserDao接口的对象
	 *
	 * @param clazz
	 * @return
	 */
	public static Object getMapper(Class clazz) {
		// 实现JDK动态代理

		/**
		 * ClassLoader loader：类加载器
		 * Class<?>[] interfaces：被代理的接口
		 * InvocationHandler h：
		 */
		Class[] interfaces = new Class[]{clazz};
		/**
		 * 会动态生成一个****.class
		 * 传统：java->class->classloader->byte
		 * Proxy:->byte
		 */
		Object o = Proxy.newProxyInstance(LubanFactory.class.getClassLoader(),
				interfaces,
				new LubanInvocationHandler()
		);
		return o;
	}
}
